home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Languages Suite
/
ProgramD2.iso
/
Borland
/
Borland C++ For TASM
/
USRGUIDE.PAK
/
COUNT.ASM
< prev
next >
Wrap
Assembly Source File
|
1996-02-21
|
2KB
|
57 lines
; Turbo Assembler example. Copyright (c) 1993 By Borland International, Inc.
; COUNT.ASM
; Small model C++-callable assembler function to count the number of
; lines and characters in a zero-terminated string.
;
; Function prototype:
; extern unsigned int LineCount(char * near StringToCount,
; unsigned int near * CharacterCountPtr);
; Input:
; char near * StringToCount: pointer to the string on which a
; line count is to be performed
;
; unsigned int near * CharacterCountPtr: pointer to the
; int variable in which the character count is to be stored
;
; Usage: bcc callct.cpp count.asm
;
; From the Turbo Assembler User's Guide
; Ch. 18: Interfacing Turbo Assembler with Borland C++
NEWLINE EQU 0ah ;the linefeed character is C's
; newline character
.MODEL SMALL
.CODE
PUBLIC _LineCount
_LineCount PROC
push bp
mov bp,sp
push si ;preserve calling program's register
; variable, if any
mov si,[bp+4] ;point SI to the string
sub cx,cx ;set character count to 0
mov dx,cx ;set line count to 0
LineCountLoop:
lodsb ;get the next character
and al,al ;is it null, to end the string?
jz EndLineCount ;yes, we're done
inc cx ;no, count another character
cmp al,NEWLINE ;is it a newline?
jnz LineCountLoop ;no, check the next character
inc dx ;yes, count another line
jmp LineCountLoop
EndLineCount:
inc dx ;count the line that ends with the
; null character
mov bx,[bp+6] ;point to the location at which to
; return the character count
mov [bx],cx ;set the character count variable
mov ax,dx ;return line count as function value
pop si ;restore calling program's register
; variable, if any
pop bp
ret
_LineCount ENDP
END